package cn.ycl.system.biz.product.controller;

import cn.ycl.syslog.OperationEnum;
import cn.ycl.syslog.SystemLog;
import cn.ycl.system.biz.product.entity.Product;
import cn.ycl.system.biz.product.entity.ProductParam;
import cn.ycl.system.biz.product.entity.ProductVo;
import cn.ycl.system.biz.product.service.ProductService;
import cn.ycl.constans.Result;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.BeanUtils;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;

//import com.alibaba.csp.sentinel.annotation.SentinelResource;

/**
 * 产品(Product)表控制层
 *
 * @author makejava
 * @since 2020-09-03 17:11:49
 */
//@CrossOrigin(origins = "http://39.101.204.247:8081", maxAge = 3600)
@RestController
@RequestMapping("/product")
public class ProductController {
    /**
     * 服务对象
     */

    @Resource
    private ProductService productService;

    /**
     * 通过主键查询单条数据
     *
     * @param id 主键
     * @return 单条数据
     */

    @GetMapping("/selectOne/{id}")
    public Product selectOne(@PathVariable("id") Long id) {
        return this.productService.queryById(id);
    }

    /**
     * 查询列表
     *
     * @return 多条数据
     */
    @SystemLog(value = "进入秒杀商城", type = OperationEnum.KILL)
    @GetMapping("/selectAll")
    public PageInfo<Product> selectAll(Product product) {
        PageHelper.startPage(product.getPageNum(), product.getPageSize());
        List<Product> products = productService.selectProduct(product);
        return new PageInfo<>(products);
    }

    /**
     * 分页条件查询
     *
     * @return 多条数据
     */
    @SystemLog(value = "进入商品管理", type = OperationEnum.PRODUCT_MANAGE)
    @GetMapping("/getProductPage")
    public PageInfo<Product> getProductPage(ProductParam productParam) {
        PageHelper.startPage(productParam.getPageNum(), productParam.getPageSize());
        List<Product> products = productService.getProductPage(productParam);
        return new PageInfo<>(products);
    }

    /**
     * 修改数据
     *
     * @param productVo 前端需要传的数据
     * @return 请求结果
     */

    @PostMapping("/updateProduct")
    public Result selectOne(@RequestBody ProductVo productVo) {
        Product product = new Product();
        BeanUtils.copyProperties(productVo, product);
        Integer update = productService.update(product);
        if (update > 0) {
            return Result.ok("修改成功");
        }
        return Result.fail("修改失败");
    }

    /**
     * 删除数据
     *
     * @param id 前端需要传的数据
     * @return 请求结果
     */

    @PostMapping("/deleteProduct/{id}")
    public Result deleteProduct(@PathVariable("id") Long id) {
        boolean result = productService.deleteById(id);
        if (result) {
            return Result.ok("删除成功");
        }
        return Result.fail("删除失败");
    }

    /**
     * 新增数据
     *
     * @param product 前端需要传的数据
     * @return 请求结果
     */

    @PostMapping("/insertProduct")
    public Result insertProduct(@RequestBody Product product) {
        Integer insert = productService.insert(product);
        return Result.ok(insert);
    }

    /**
     * 通过实体作为筛选条件查询
     *
     * @param product 实例对象
     * @return 对象列表
     */
    @GetMapping("/queryByProduct")
    public PageInfo<Product> queryAll(@RequestBody Product product) {
        PageHelper.startPage(product.getPageNum(), product.getPageSize());
        List<Product> products = productService.queryAll(product);
        return new PageInfo<>(products);
    }


    @PostMapping(value = "/hello")
    public String hello(@RequestBody Product product) {
        return product.getName();
    }


    @PostMapping(value = "/hello22")
    public String hello2() {
        return "Hello22";
    }

}